import axios from 'axios';
import {ElMessage} from 'element-plus';
import router from '@/router'
// import qs from "qs";

// 创建 Axios 实例
const axiosInstance = axios.create({
    baseURL: "http://101.37.69.211:8080",
    timeout: 20000, // 请求超时时间
    headers: {'content-type': 'application/x-www-form-urlencoded'}
});

// 使用axios请求拦截
// 引入qs插件，使用qs.stringify()方法处理参数
// axios.interceptors.request.use(res => {
//   if(res.method === 'get') {
//     res.paramsSerializer = function (params) {
//       return qs.stringify(params, {arrayFormat: 'repeat'})
//     }
//   }
// })

// 请求拦截器
axiosInstance.interceptors.request.use(
    async (config) => {

        const frontToken = localStorage.getItem('frontToken');

        if (frontToken || config.url === "/student/login") {
            config.headers['frontToken'] = frontToken;
        }
        return config;
    },
    (error) => {
        return Promise.reject(error);
    }
);

// 响应拦截器
axiosInstance.interceptors.response.use(
    async (response) => {
        if (response.data.code == 403) {
            ElMessage.error({
                    message: response.data.message,
                    grouping: true,
                    type: 'error',
                    duration: 1500,
                    onClose: async function () {
                        await router.push({name:"/login"})
                    }
                }
            );
            return Promise.reject(response.data);
        } else if (response.data.code == 500) {
            ElMessage.error(response.data.message);
            return Promise.reject(response.data);
        } else {
            return response;
        }
    },
    (error) => {
        if (error.response) {
            switch (error.response.status) {
                case 401:
                    ElMessage.error('未授权，请重新登录');
                    break;
                case 403:
                    ElMessage.error('拒绝访问');
                    break;
                case 404:
                    ElMessage.error('请求地址出错');
                    break;
                case 500:
                    ElMessage.error('服务器内部错误');
                    break;
                default:
                    ElMessage.error('请求失败');
            }
        }
        return Promise.reject(error);
    }
);

export default axiosInstance;
